查看原文
其他

flutter与compose的爱恨情仇

徐宜生 群英传 2022-12-21

点击上方蓝字关注我,知识会给你力量

话说天下大势,分久必合,合久必分,自Flutter举义起,已两年有余。

然天下苦客户端久矣,一个需求不论是Android还是iOS,各端的实现都不一样,开发难度也不一样,实现效果也不一样,开发时间double,bugfix也是double,所以,跨端的开发应运而生,从H5的探索到RN的探索,这些跨平台方案始终都没逃出原生开发的桎梏,直到Flutter的出现,让跨平台开发进入了全新的时代,自渲染引擎的跨平台方案,打开了跨平台的阳光大道,从目前来看,Flutter已经算是成功了。

有人的地方就有卷王。

同样的Google,内部又孵化出了Compose,从表现上来说,Compose和Flutter是非常接近的,不能说完全一样,毕竟还是有差别的。但整体都是申明式编程,这点已经是当前最热的编程趋势了,十年河东,十年河西。

那为啥Google内部也要这么卷呢?

究其原因,还是因为团队不同,Flutter诞生于Chrome团队,是一帮做Web的开发做的跨平台框架,从最开始的设计初衷,就是指向了跨平台这条路,而Compose,则是诞生于Android团队,是为了解决当前View的架构体系不能再继续适应申明式编程的范式而做出的重构。

所以,从这一点上来看,Flutter身上,实际带着很多前端的影子,从布局方式到代码风格,都是浓浓的前端风,而且Flutter的工作重心在于跨平台,所以在各端的细节打磨上还有一些不足,不论是状态管理还是数据流,Flutter的官方解决方案还没有形成统一,但是Flutter的自渲染引擎,让它的绘制功夫成了一绝,不用受限于原生的绘制,可以让渲染做到随心所欲,所以,如果你的App是一个偏向于强展示性的应用,那么Flutter可以让你的App更加富有表现力。

但Flutter的问题也很明显,由于它的独立性,这就导致了混编的问题会非常多,Flutter嵌入原生App后,资源、图片的交互和共享,就成了比较麻烦的问题,可以说,Flutter目前的核心应用场景是独立的跨平台App,而非混编的App。

那么Compose呢?

从时间点上来看,Compose的诞生晚于Flutter,但Compose充分吸收了Flutter的各种优点,如果你两种框架都有使用过,你就可以在它们身上同时发现彼此的影子。

对于Compose来说,它的首要任务不是解决跨平台问题,而是提高原生App的开发效率,推翻了原有的命令式View体系,使用Compose提供了一整套的申明式UI架构。

这样一来,格局就打开了,先不用纠结跨平台的各种问题,我就先把Android搞搞好,所以,Compose可以无缝和现有原生App混编,而且不能叫混编,因为它本身就是原生,只不过是利用一种框架,实现了新的编程语法,这种申明式的语法,完全放弃了xml的布局方式,这样一来,什么ViewBinding,DataBinding都成为了过去式,退一步,海阔天空。再借助Kotlin愈发成熟的语言机制,大量的语法糖和编译器黑科技,让Compose如虎添翼,所以从一开始,Compose在原生这条路上,就领先了Flutter一个车位,不论是协程还是Flow,还是JetPack组件,可以无缝提供给Compose,以至于状态管理、数据流的问题迎刃而解,特别是ConstraintLayout和MotionLayout的Compose化,让原生的布局编程相比Flutter有了质的飞跃。

那么问题来了,我该用哪个?

打工仔的世界里,哪里有单选题。

扶我起来,我还能学

当然,大家对待这些层出不穷的新技术,应该抱有这样的态度——海纳百川、追求卓越、开明睿智、大气谦和。

首先,Flutter和Compose并不冲突,我是原生开发,但并不妨碍我学习Flutter,我的开源项目Flutter Dojo,https://github.com/xuyisheng/flutter_dojo ,也吸引了上千人加入我的Flutter修仙群,学了Flutter,再看Compose,很快就能上手,这叫什么,殊途同归。我们对待这些新技术一定要抱着谦卑的学习心态,了解它的使用,了解它的设计思路,正所谓海纳百川,有容乃大。

其次,技术不是单选题,但是却有优先级。

  • 如果你是全新的项目,希望快速开发,并且支持多端跨平台,那么Flutter绝对是你目前最好的选择。
  • 如果你是原生开发,需要提高开发效率,那么Compose和kotlin,绝对是你逃不掉的技术壁垒。


向大家推荐下我的网站 https://xuyisheng.top/  点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问



往期推荐


本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后,请在原创发表24小时后转载。
< END >
作者:徐宜生

更文不易,点个“三连”支持一下👇


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存